home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SGI Hot Mix 17
/
Hot Mix 17.iso
/
HM17_SGI
/
research
/
lib
/
draw_alloc.pro
< prev
next >
Wrap
Text File
|
1997-07-08
|
8KB
|
280 lines
;
; $Id: draw_alloc.pro,v 1.10 1997/03/18 00:07:57 lubos Exp $
;
; WidDraw
; Widget Draw class library
;
; Copyright (c) 1993-1997, Research Systems, Inc. All rights reserved.
; Unauthorized reproduction prohibited.
;
; MODIFICATION HISTORY
; Written by: Joshua Goldstein, 12/93
;
;
;
; DRAW_Icon
; Return the draw toolbar icon
;
FUNCTION DRAW_Icon
RETURN, [ $
[ 255b, 255b, 255b, 255b ], $
[ 31b, 0b, 0b, 128b ], $
[ 31b, 0b, 0b, 128b ], $
[ 159b, 219b, 185b, 157b ], $
[ 153b, 255b, 249b, 159b ], $
[ 153b, 255b, 255b, 159b ], $
[ 25b, 255b, 255b, 143b ], $
[ 153b, 255b, 255b, 159b ], $
[ 153b, 255b, 255b, 159b ], $
[ 31b, 255b, 255b, 143b ], $
[ 159b, 255b, 255b, 135b ], $
[ 153b, 255b, 255b, 147b ], $
[ 153b, 127b, 255b, 153b ], $
[ 25b, 62b, 254b, 132b ], $
[ 25b, 158b, 124b, 134b ], $
[ 153b, 207b, 57b, 159b ], $
[ 159b, 231b, 147b, 159b ], $
[ 159b, 243b, 199b, 159b ], $
[ 153b, 249b, 239b, 143b ], $
[ 153b, 252b, 255b, 159b ], $
[ 25b, 254b, 255b, 159b ], $
[ 25b, 255b, 255b, 143b ], $
[ 153b, 255b, 255b, 159b ], $
[ 159b, 255b, 249b, 159b ], $
[ 159b, 219b, 185b, 157b ], $
[ 31b, 0b, 0b, 128b ], $
[ 31b, 0b, 0b, 128b ], $
[ 255b, 255b, 255b, 255b ], $
[ 255b, 255b, 255b, 255b ], $
[ 255b, 193b, 96b, 240b ], $
[ 255b, 193b, 96b, 240b ], $
[ 255b, 255b, 255b, 255b ] $
]
END
;
; DRAW_Copy
; Copy a draw. 2 copy methods:
;
; if( copy != NULL) { *copy = *ptr; free(ptr); }
; else { *(copy = malloc(...)) = *ptr; }
;
PRO DRAW_Copy, Ptr, Copy
GenCopy, Ptr, Copy
END
;
; DRAW_Destroy
; Release resources for the given draw
;
PRO DRAW_Destroy, Ptr
GenDestroy, Ptr
END
;
; DRAW_Event
; Event handling routine for a draw dialog. Shares common code
; (c.f. widbuild.pro)
;
PRO DRAW_Event, Event
MISC_Event, Event, -1 ; constant is Font Offset in Foci
END
;
; DRAW_Build
; Create a dialog box a draw object. If ptr is nil then
; create the object as well.
;
PRO DRAW_Build, Ptr, ParPtr
COMMON WidEd_Comm
DRAW_Alloc, ParPtr, Ptr ; Allocate object if necessary
MgrName = 'WE_DRAW' + STRTRIM(Ptr, 2) ; Create dialog box name
IF XRegistered(MgrName) THEN RETURN ; See if it already exists
Title = GetId(Ptr) + '(Child of ' + GetId(ParPtr) + ')'
Ptr2Obj, Ptr, Obj
; Create dialog box
IF SmallScreen[0] NE 0 THEN BEGIN
Base = WIDGET_BASE(/COLUMN, TITLE=Title, GROUP_LEADER=TopDlg, $
X_SCROLL_SIZE=SmallScreen[0], $
Y_SCROLL_SIZE=SmallScreen[1] )
ENDIF ELSE BEGIN
Base = WIDGET_BASE(/COLUMN, TITLE=Title, GROUP_LEADER=TopDlg)
ENDELSE
Foci = LONARR(9)
Base1 = WIDGET_BASE(Base, /FRAME, /COLUMN)
Lab = WIDGET_LABEL(Base1, VALUE="Basic Information")
BuildXY, Base1, Obj, Foci, 0, /SIZE
; Event Related Info
Base2 = WIDGET_BASE(Base1,/NONEXCLUSIVE, /ROW)
Button = WIDGET_BUTTON(Base2, VALUE='Accept Button Events', $
UVALUE='DO_BUTTON')
IF Obj.DrawBtnEv THEN WIDGET_CONTROL, Button, /SET_BUTTON
Button = WIDGET_BUTTON(Base2, VALUE='Accept Motion Events', $
UVALUE='DO_MOTION')
IF Obj.DrawMoEv THEN WIDGET_CONTROL, Button, /SET_BUTTON
Base2 = WIDGET_BASE(Base1, /FRAME, /ROW)
Lab = WIDGET_LABEL(Base2, VALUE="Backing Store:")
Base3 = WIDGET_BASE(Base2, /ROW, /EXCLUSIVE)
Btns = LONARR(3)
Btns[0] = WIDGET_BUTTON(Base3, VALUE='None', UVALUE='NO_STORE', /NO_REL)
Btns[1] = WIDGET_BUTTON(Base3, VALUE='Server', UVALUE='SVR_STORE', /NO_REL)
Btns[2] = WIDGET_BUTTON(Base3, VALUE='IDL', UVALUE='IDL_STORE', /NO_REL)
WIDGET_CONTROL, Btns[Obj.DrawRetain], /SET_BUTTON
BuildOther, Base, Obj, Foci, 2, /FRAME
Base1 = WIDGET_BASE(Base, /FRAME, /COLUMN)
Lab = WIDGET_LABEL(Base1, VALUE="Draw Appearance Controls")
BuildXY, Base1, Obj, Foci, 5, /OFFSET, /SCROLL
BuildOkCancel, Base, Obj
DlgInfo = { $
Foci: Foci, $
ObjPtr: Ptr $
}
Obj.Dialog = Base
WIDGET_CONTROL, Base, SET_UVALUE=DlgInfo, /NO_COPY
WIDGET_CONTROL, Base, /REALIZE
XMANAGER, MgrName, Base, EVENT_HANDLER='DRAW_Event', CLEANUP='MISC_Kill'
Obj2Ptr, Obj, Ptr
END
;
; DRAW_Save
; Save draw information to a file.
; This is a simple object to save.
;
PRO DRAW_Save, Unit, Ptr
GenWrite, Unit, Ptr
END
;
; DRAW_Restore
; Read in a draw object from a file
;
PRO DRAW_Restore, Unit, Parent, Ptr
MISC_Restore, Unit, Parent, Ptr, "DRAW", 0
END
;
; DRAW_Generate
; Create a draw object for previewing
;
PRO DRAW_Generate, Base, Ptr
COMMON WidEd_Comm
Ptr2Obj, Ptr, Obj
Id = 0L ; Prevent EXECUTE from creating a new variable
; Build a command string
Cmd = 'Id = WIDGET_DRAW(Base'
IAddCmd, Cmd, Obj.FrameSize, 'FRAME'
IAddCmd, Cmd, Obj.DrawRetain, 'RETAIN'
IAddCmd, Cmd, Obj.XSize, 'XSIZE'
IAddCmd, Cmd, Obj.YSize, 'YSIZE'
IAddCmd, Cmd, Obj.XOffset, 'XOFFSET'
IAddCmd, Cmd, Obj.YOffset, 'YOFFSET'
IAddCmd, Cmd, Obj.XScrollSize, 'X_SCROLL_SIZE'
IAddCmd, Cmd, Obj.YScrollSize, 'Y_SCROLL_SIZE'
; Create draw by executing the command string we just built
IF EXECUTE(Cmd+')') NE 1 THEN BEGIN
Obj2Ptr, Obj, Ptr
MESSAGE,'Could not create Draw ' + VarName[Ptr]
ENDIF
Obj.DrawId = Id ; Save widget id for TestDraw
Obj2Ptr, Obj, Ptr
END
;
; DRAW_GenWid
; Create IDL code for creating a DRAW
;
PRO DRAW_GenWid, Unit, Ptr, Parent
Name = VarId(Ptr) ; Get name for draw
Ptr2Obj, Ptr, Obj ; Get object information
XPRINTF, Unit, FORMAT='(" ",A," = WIDGET_DRAW( ",A)', $
Name, Parent, /NO_EOL
ISaveCmd, Unit, Obj.DrawBtnEv, "BUTTON_EVENTS"
ISaveCmd, Unit, Obj.FrameSize, "FRAME"
ISaveCmd, Unit, Obj.DrawMoEv, "MOTION_EVENTS"
ISaveCmd, Unit, Obj.DrawRetain, "RETAIN", /FORCE
SSaveCmd, Unit, UValue(Obj, Ptr), "UVALUE"
SSaveCmd, Unit, Obj.Value, "VALUE"
ISaveCmd, Unit, Obj.XOffset, "XOFFSET"
ISaveCmd, Unit, Obj.XSize, "XSIZE"
ISaveCmd, Unit, Obj.XScrollSize, "X_SCROLL_SIZE"
ISaveCmd, Unit, Obj.YOffset, "YOFFSET"
ISaveCmd, Unit, Obj.YSize, "YSIZE"
ISaveCmd, Unit, Obj.YScrollSize, "Y_SCROLL_SIZE"
XPRINTF, Unit, ')'
Obj2Ptr, Obj, Ptr
END
;
; DRAW_Alloc
; Allocate a draw object. Don't allocate if ptr is non-nil
;
PRO DRAW_Alloc, Parent, Ptr
COMMON WidEd_Comm
IF KEYWORD_SET(Ptr) NE 0 THEN RETURN ; if(ptr != NULL) return
Ptr = WIDGET_BASE(GROUP=TopDlg) ; Allocate a pointer
; Create a draw object
Obj = { $
WE_DRAW, $
Type: 'DRAW', $
Parent: Parent, $ ; Pointer to parent
Id: NewId(),$ ; Permanent Id
Dialog: 0L, $ ; Save Dialog ID (need for Cut consistency)
Next: 0L, $ ; index of next child/free/top
Name: '', $ ; Title or object name
FrameSize: 0, $
XSize: 0, $
YSize: 0, $
XOffset: 0, $
YOffset: 0, $
XScrollSize: 0, $
YScrollSize: 0, $
UValue: '', $
Value: '', $
DrawId: 0L, $
DrawBtnEv: 0, $
DrawMoEv: 0, $
DrawRetain: 0 $
}
Obj2Ptr, Obj, Ptr ; Store object in pointer
END